/**
 * 脉博网络后台管理系统
 * 包名：com.maibow.util
 * 文件名：LuceneIKAnalyzerUtil.java
 * 作者: 吴比(Wubi)
 * 时间：2015年12月12日-下午5:09:52
 * Copyright@ 2015湖南脉博网络科技有限公司-版权所有
 * 
 */
/**
 * 脉博网络后台管理系统
 * 包名：com.maibow.util
 * 文件名：LuceneIKAnalyzerUtil.java
 * 作者: 吴比(Wubi)
 * 时间：2015年12月12日-下午5:09:52
 * Copyright@ 2015湖南脉博网络科技有限公司-版权所有
 * 
 */
package com.maibow.util;

import java.io.IOException;
import java.io.StringReader;
import java.io.UnsupportedEncodingException;

import org.apache.http.util.EntityUtils;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
import org.wltea.analyzer.core.IKSegmenter;
import org.wltea.analyzer.core.Lexeme;
import org.wltea.analyzer.lucene.IKAnalyzer;

/**
 * 脉博网络后台管理系统
 * 包名：com.maibow.util
 * 文件名：LuceneIKAnalyzerUtil.java
 * 作者: 吴比(Wubi)
 * 时间：2015年12月12日-下午5:09:52
 * Copyright@ 2015湖南脉博网络科技有限公司-版权所有
 * 
 */
public class LuceneIKAnalyzerUtil {
    private Analyzer anal;

    protected Logger logger = Logger.getLogger(this.getClass());

    /**
     * 
     * getIKAnalyzer(这里用一句话描述这个方法的作用)
     * (这里描述这个方法适用条件 – 可选)
     * 标记：@param text
     * 标记：@return
     * 返回值：String
     * 作者：吴比(Wubi)
     * 
     * @throws UnsupportedEncodingException
     * 
     * @exception
     * @since 1.0.0
     */
    public String getIKAnalyzer(String text) throws UnsupportedEncodingException {
        // 创建分词对象
        String result = "";
        anal = new IKAnalyzer(true);
        StringReader reader = new StringReader(text);
        // 分词
        TokenStream ts = anal.tokenStream("", reader);
        CharTermAttribute term = ts.getAttribute(CharTermAttribute.class);

        // 重置TokenStream（重置StringReader）
        try {
            ts.reset();
            // 遍历分词数据
            while (ts.incrementToken()) {
                result = result + term.toString() + " ";
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            reader.close();
        }

        //result = new String(result.getBytes(), "GBK");
        logger.debug(result);
        return result;
    }
    
    public String getIKAnalyzerV2(String text) throws UnsupportedEncodingException {
        // 创建分词对象
        String result = "";
        anal = new IKAnalyzer(true);
        StringReader reader = new StringReader(text);
        // 分词
        TokenStream ts = anal.tokenStream("", reader);
        CharTermAttribute term = ts.getAttribute(CharTermAttribute.class);

        // 重置TokenStream（重置StringReader）
        try {
            ts.reset();
            // 遍历分词数据
            while (ts.incrementToken()) {
                result = result + term.toString() + "&";
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            reader.close();
        }

        //result = new String(result.getBytes(), "GBK");
        logger.debug(result);
        return result;
    }

    /**
     * 
     * getLuceneAnalyzer(这里用一句话描述这个方法的作用)
     * (这里描述这个方法适用条件 – 可选)
     * 标记：@param text
     * 标记：@return
     * 返回值：String
     * 作者：吴比(Wubi)
     * 
     * @exception
     * @since 1.0.0
     */
    public String getLuceneAnalyzer(String text) {
        StringReader sr = new StringReader(text);
        String result = "";
        IKSegmenter ik = new IKSegmenter(sr, true);
        Lexeme lex = null;
        try {
            while ((lex = ik.next()) != null) {
                result = result + lex.getLexemeText() + " ";
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        logger.debug(result);
        return result;
    }
}
